package com.yqb.study.config.swagger;

import io.swagger.annotations.ApiOperation;

import static com.google.common.base.Predicates.or;

import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.google.common.base.Predicate;

import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

/**
 * swagger配置类
 */
@Configuration
@EnableSwagger2 // 开启swagger
@ConditionalOnProperty(prefix = "springbootstudy", name = "swagger-open", havingValue = "true")
public class SwaggerConfig {
	
	/** 指定了页面显示的信息，标题、描述 */
	private ApiInfo apiInfo() {
		return new ApiInfoBuilder().title("使用Spring Boot 集成 swagger")
				.description("玩转Spring Boot 博客地址：http://blog.csdn.net/cl_andywin").build();
	}
	
	@Bean
	public Docket createRestApi() {
		return new Docket(DocumentationType.SWAGGER_2)
				.groupName("业务文档") // 分组名称
				.apiInfo(apiInfo())
				.select()
				.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)) // 这里采用包含注解的方式来确定要显示的接口
				// .apis(RequestHandlerSelectors.basePackage("com.stylefeng.guns.modular.system.controller")) // 这里采用包扫描的方式来确定要显示的接口,可以使用正则式
				.paths(PathSelectors.any())
				.build();
	}

//	/**
//	 * 这里是可以分组定义多个Docket，我这里举例定义了两个，一个是业务文档类型，一个是财务文档类型。 
//	 */
//
//	/** 业务文档 */
//	@SuppressWarnings("unchecked")
//	private Predicate<String> businessPaths() {
//		return or(PathSelectors.regex("/data.*"));// 这里是正则表达式
//	}
//
//	@Bean
//	public Docket businessDocket() {
//		return new Docket(DocumentationType.SWAGGER_2).groupName("业务文档") // 分组名称
//				.select().paths(businessPaths()) // 指定路径处理PathSelectors.any()代表所有的
//				.build().apiInfo(apiInfo());
//	}
//
//	/** 财务文档 */
//	@SuppressWarnings("unchecked")
//	private Predicate<String> financePaths() {
//		return or(PathSelectors.regex("/finance.*"));// 这里是正则表达式
//	}
//
//	@Bean
//	public Docket financeDocket() {
//		return new Docket(DocumentationType.SWAGGER_2).groupName("财务文档")// 分组名称
//				.select().paths(financePaths())// 指定路径处理PathSelectors.any()代表所有的
//				.build().apiInfo(apiInfo());
//	}
}
